// ESLint配置文件，结合了TypeScript、React和Prettier的规则配置
// 主要包含以下插件配置:
// - @electron-toolkit/eslint-config-ts: Electron项目的TypeScript ESLint配置
// - @electron-toolkit/eslint-config-prettier: 集成Prettier的ESLint配置
// - eslint-plugin-react: React特定的linting规则
// - eslint-plugin-react-hooks: React Hooks的linting规则
// - eslint-plugin-react-refresh: 支持React Fast Refresh的linting规则
import tseslint from '@electron-toolkit/eslint-config-ts'
import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier'
import eslintPluginReact from 'eslint-plugin-react'
import eslintPluginReactHooks from 'eslint-plugin-react-hooks'
import eslintPluginReactRefresh from 'eslint-plugin-react-refresh'

export default tseslint.config(
  // 忽略目录配置
  { ignores: ['**/node_modules', '**/dist', '**/out'] },
  // TypeScript推荐规则
  tseslint.configs.recommended,
  // React推荐规则
  eslintPluginReact.configs.flat.recommended,
  // React JSX运行时规则
  eslintPluginReact.configs.flat['jsx-runtime'],
  {
    // React版本检测设置
    settings: {
      react: {
        version: 'detect' // 自动检测项目中安装的React版本
      }
    }
  },
  {
    // 仅对.ts和.tsx文件应用以下规则
    files: ['**/*.{ts,tsx}'],
    plugins: {
      'react-hooks': eslintPluginReactHooks,
      'react-refresh': eslintPluginReactRefresh
    },
    rules: {
      // 从插件继承的推荐规则
      ...eslintPluginReactHooks.configs.recommended.rules,
      ...eslintPluginReactRefresh.configs.vite.rules,

      // React相关规则配置
      'react/react-in-jsx-scope': 'off', // 关闭，因为React 17+不需要手动引入React
      'react/prop-types': 'off', // 关闭，因为TypeScript已经提供了类型检查
      'react/display-name': 'off', // 关闭组件displayName检查
      'react-hooks/rules-of-hooks': 'error', // 强制Hook规则
      'react-hooks/exhaustive-deps': 'warn', // 检查Hook依赖项
      'react/jsx-filename-extension': ['error', { extensions: ['.tsx'] }], // 只允许.tsx文件包含JSX
      'react/jsx-uses-react': 'error', // 防止未使用的React导入
      'react/jsx-uses-vars': 'error', // 防止未使用的JSX变量

      // TypeScript相关规则配置
      '@typescript-eslint/explicit-function-return-type': 'off', // 不强制函数返回类型注解
      '@typescript-eslint/no-explicit-any': 'warn', // 警告使用any类型
      '@typescript-eslint/no-unused-vars': 'warn', // 警告未使用的变量
      '@typescript-eslint/consistent-type-imports': 'error' // 强制一致的类型导入方式
    }
  },
  // 集成Prettier配置，避免与ESLint格式规则冲突
  eslintConfigPrettier
)
